#!/usr/bin/python3.7
#-*- coding: UTF-8 -*-
#
# coding=utf-8
# https://blog.csdn.net/asialee_bird/article/details/96894533


import tools.tools as tools
import Textrank_4zh
import TextRank_jieba
import TextRank_snownlp
import re

class Show():
    def showTextrank4zh(text):
        # 基于Textrank4zh的TextRank算法实现
        '''
        textrank4zh模块是针对中文文本的TextRank算法的python算法实现
        '''
        print('(1)★基于Textrank4zh的    TextRank算法实现\n')
        # 关键词抽取
        print('①关键词抽取:')
        keywords = Textrank_4zh.keywords_extraction(text)
        print(keywords)

        # 关键短语抽取
        print('②关键短句抽取:')
        keyphrases = Textrank_4zh.keyphrases_extraction(text)
        print(keyphrases)

        # 关键句抽取
        print('③关键句抽取:')
        keysentences = Textrank_4zh.keysentences_extraction(text)
        print(keysentences)
    def showJieba(text):
        # 基于jieba的textrank算法实现
        print('\n(2)基于jieba的    textrank算法实现\n')
        keywords = TextRank_jieba.keywords_textrank(text)
        print(keywords)
    def showSnowNLP(text):
        # 基于SnowNLP的textrank算法实现
        print('\n(3)基于SnowNLP的  textrank算法实现\n')
        snlp = TextRank_snownlp.SnowNLP(text)
        print('①关键词抽取(6)')
        print(snlp.keywords(6))  # 关键词抽取
        print('②关键句抽取(3)')
        print(snlp.summary(3))  # 关键句抽取

def writeFile(article, path, flag='merge',
              stop_words_file=None, allow_speech_tags=Textrank_4zh.util.allow_speech_tags,
              source='all_filters',
              num=5
              ):         # 对一整篇文章摘要
    # article             -- list，代表一整篇文章
    # flag                -- 合并成一个段落（整篇文章的上下文有关联） or 散装成多个段落

    # stop_words_file     --★停用词词典
    # allow_speech_tags   --运行的词性列表，用于过滤某些词性的词

    # source              -- ★选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来生成句子之间的相似度。
    # 		              -- 默认值为`'all_filters'`，可选值为`'no_filter', 'no_stop_words', 'all_filters'
    #   no_filter         --  对sentences中每个句子分词而得到的两级列表。
    #   no_stop_words     --  去掉words_no_filter中的停止词而得到的两级列表。
    #   all_filters       --  保留words_no_stop_words中指定词性的单词而得到的两级列表。
    # sim_func -- 指定计算句子相似度的函数# 两个句子的相似度比较（按照相同的关键词作为关键程度）

    # num                 -- 获取最重要的num个句子用来生成摘要

    tools.cleanFile(path)
    article = tools.mergeOrSubsection(article, flag)
    for paragraph in article:                       # 若是flag='merge'，则实际上article=[paragraph]
        keysentences = Textrank_4zh.keysentences_extraction\
            (paragraph,
             stop_words_file=stop_words_file, allow_speech_tags=allow_speech_tags,
             source=source,
             num=num)
        # paragraph           -- 文本内容，字符串

        # print(keysentences)
        tools.writeSum(keysentences, path)


if __name__ == "__main__":
    # show = Show()
    # show.showTextrank4zh(text)
    # show.showJieba(text)
    # show.showSnowNLP(text)

    config = tools.Tools()
    article = tools.openFile(config.input_path)     # 文件路径自这儿，写在配置类中了
    print('Textrank_4zh的关键句抽取（基于textRank）:')
    '''
    句子抽取任务主要针对的是自动摘要这个场景，
    将每一个sentence作为一个顶点，根据两个句子之间的内容重复程度来计算他们之间的“相似度”，
    以这个相似度作为联系，由于不同句子之间相似度大小不一致，在这个场景下构建的是以相似度大小作为edge权重的有权图。
    '''
    writeFile(article, config.output_path, num=3)



